/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.dsw2.biblioteca8a.bl;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.dsw2.biblioteca8a.dao.DetallePrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.dao.PrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoDetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoPrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoServicio;
import mx.itschapala.dsw2.biblioteca8a.modelo.DetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Libro;
import mx.itschapala.dsw2.biblioteca8a.modelo.Prestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Usuario;

/**
 *
 * @author User
 */
@Stateless
public class PrestamoBL implements PrestamoblLocal {
        @EJB
        private DetallePrestamoDaoLocal detallePrestamoDao;
        private PrestamoDaoLocal prestamoDao;
    @Override
    public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
        List<Prestamo> prestamos=prestamoDao.findIncompleteByUser(user);
        int available = 3;
        for(Prestamo p: prestamos){
            available= available- detallePrestamoDao.findLends(p).size();
            
        
        }
        if(available<=0 || user.getId()==null || books.isEmpty() || books.size()>available){
            return EstadoServicio.INCOMPLETE;
        } else{
        Prestamo p = new Prestamo();
        p.setIdusuario(user);
        p.setFecha(new Date());
        p.setHora(new Date());
        p.setEstado(EstadoPrestamo.OPEN.ordinal());
        prestamoDao.create(p);
        
        for(Libro l: books){
        DetallePrestamo dp= new DetallePrestamo();
        dp.setPrestamo(p);
        dp.setIdlibro(l);
        dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
        detallePrestamoDao.create(dp);
        }
        
        return EstadoServicio.COMPLETE;
        }
        
    }

}
